package com.demo.bean;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.List;

public interface BeanDefinition {
    /**
     * 获取bean的class
     * @return
     */
    String getBeanClass();

    /**
     * 获取 工厂的class
     * @return
     */
    String getFactoryClass();
    /**
     * 获取 工厂bean的名称
     * @return
     */
    String getFactoryBeanName();

    /**
     * 获取工厂方法的名称
     * @return
     */
    String getFactoryMethodName();

    /**
     * 是否单例
     * @return
     */
    boolean isSingleton();

    /**
     * 是否原型
     * @return
     */
    boolean isPrototype();

    /**
     * 获取构造参数
     * @return
     */
    List<Object> getConstructorArgumentValues();

    /**
     * 获取构造器
     * @return
     */
    Constructor getConstructor();

    /**
     * 获取构造器
     * @return
     */
    void setConstructor(Constructor constructor);

    /**
     * 获取工厂方法
     * @return
     */
    Method getFactoryMethod();

    /**
     * 设置工厂方法
     * @return
     */
    void setFactoryMethod(Method method);

    /**
     * 获取 property 的属性值
     * @return
     */
    List<PropertyValue> getPropertyValues();

    /**
     * 设置初始化方法的名称
     * @param methodName
     */
    void setInitMethodName(String methodName);

    /**
     * 获取初始化方法的名称
     * @return
     */
    String getInitMethodName();

}
